package time.code.classic;

import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * Description: Date示例
 *
 * @author code-worker
 * @date 2021/08/21 13:53
 */
public class DateDemo {

    /**
     * task: 获取当前时间
     * @date 2021/8/21 13:57
     */
    public void getNowDate(){
        System.out.println("当前时间为："+new Date());
    }

    /**
     * task: 获取当前时间戳
     * @date 2021/8/21 14:11
     */
    public void getNowTimeStamp(){
        Date date = new Date();
        System.out.println("当前时间戳: "+ date.getTime());
    }

    /**
     * task: 获取当前时间(带格式)
     * @date 2021/8/21 14:04
     * @param format 格式
     */
    public void getNowDateWithFormat(String format){
        SimpleDateFormat sdf = new SimpleDateFormat(format);
        System.out.println("当前时间为(带格式): "+sdf.format(new Date()));
    }

    /**
     * task: 将指定时间转换为指定格式输出
     * @date 2021/8/21 14:21
     * @param date 时间
     * @param format 格式
     */
    public void dateToFormat(Date date, String format){
        SimpleDateFormat sdf = new SimpleDateFormat(format);
        System.out.println("指定时间(带格式): "+sdf.format(date));
    }

    /**
     * task: 将指定时间戳转换为指定格式
     * @date 2021/8/21 14:21
     * @param timestamp 时间戳
     * @param format 格式
     */
    public void timeStampToFormat(long timestamp, String format){
        SimpleDateFormat sdf = new SimpleDateFormat(format);
        System.out.println("指定时间(带格式): "+sdf.format(timestamp));
    }

    /**
     * task: 获取两个时间点的时间差
     * @date 2021/8/21 15:16
     * @param begin 开始时间
     * @param end 结束时间
     */
    public void getDateBetween(Date begin, Date end){
        System.out.printf("两个时间点的时间差: %.2f\n", (end.getTime() - begin.getTime())/(1.0 * 24 * 60 * 60 * 1000));
    }

    /**
     * task: 两个时间点的比较
     * @date 2021/8/21 17:55
     * @param one 第一个时间点
     * @param another 第二个时间点
     */
    public void getDateCompare(Date one, Date another){
        System.out.println("两个时间点的比较: "+one+ ", " +another);
        System.out.println("两个时间点的比较结果: "+((one.compareTo(another)<0)?one:another)+"更早");
    }

    /**
     * task: 判断时间点先后
     * @date 2021/8/21 18:01
     * @param one 第一个时间点
     * @param another 第二个时间点
     */
    public void checkDateBeforeAndAfter(Date one, Date another){
        System.out.println("时间点: "+one+"是否早于时间点: "+another+"==>"+ (one.before(another)?"早于":"晚于"));
        System.out.println("时间点: "+one+"是否晚于时间点: "+another+"==>"+ (one.after(another)?"早于":"晚于"));
    }

    public static void main(String[] args) {
        DateDemo demo = new DateDemo();
        demo.getNowDate();
        demo.getNowTimeStamp();
        System.out.println(System.currentTimeMillis());
        demo.getNowDateWithFormat("yyyy-MM-dd HH:mm:ss");
        demo.getNowDateWithFormat("yyyy-MM-dd");
        Date date = new Date(1629526859681L);
        demo.dateToFormat(date, "yyyy-MM-dd HH:mm:ss");
        demo.timeStampToFormat(date.getTime(), "yyyy-MM-dd HH:mm:ss");
        demo.getDateBetween(date, new Date());
        demo.getDateCompare(date, new Date());
        demo.checkDateBeforeAndAfter(date, new Date());
    }

}
